// 表单验证的原则：前端验证为辅，后端验证为主
// joi 包，为表单中携带的每个数据项
const joi = require('joi')

/*
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 * integer()必须是整数
 * email() 必须符合email格式
 */

// 定义用户验证规则
const username = joi.string().min(3).max(12).required()
const password = joi.string().alphanum().pattern(/^[\S]{6,12}$/).required()

// 定义验证注册 与 登录规则并共享出去
exports.reg_login_schema = {
    body: {
        username,
        password
    }
}

// 定义修改个人信息页规则验证规则并共享
const id = joi.number().integer().min(1).required()
const nickname = joi.string().required()
const email = joi.string().email().required()

exports.up_userInfo_schema = {
    body: {
        id,
        nickname,
        email
    }
}

// 定义修改密码的验证规则并共享
exports.up_password_schema = {
    body: {
        oldPwd: password,
        // joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
        // joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
        // .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
        newPwd: joi.not(joi.ref('oldPwd')).concat(password)
    }
}

// 定义更改头像验证规则
  // dataUri() 定义字符串为base64格式的
const avatar = joi.string().dataUri().required()
exports.up_Avatar ={
    body:{
        avatar
    } 
}